package com.wlper.lib.uitls;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 字符串工具类
 * 
 * @author wanliang527
 * @date 2014-06-04
 * 
 */
public class StringUtils {

    /**
     * 判断一个字符串是否为空字符串
     * 
     * @param str
     *            字符串内容
     * @return
     */
    public static boolean isStrNull(String str) {
        if (str == null || str.trim().equals(""))
            return true;
        return false;
    }

    /**
     * 判断一个字符串是否含有空字符。字符串为Null的时候返回false
     * 
     * @param str
     * @return
     */
    public static boolean isContainSpace(String str) {
        if (isStrNull(str))
            return true;
        Pattern pattern = Pattern.compile("[\\s]+");
        Matcher matcher = pattern.matcher(str);
        boolean flag = false;
        while (matcher.find()) {
            flag = true;
        }
        return flag;
    }

    /**
     * 判断密码是否合法。
     * 
     * @param passwdStr
     * @return
     */
    public static boolean isPasswdValid(String passwdStr) {
        if (!checkPasswdStr(passwdStr).equals("OK"))
            return false;
        return true;
    }

    /**
     * 检测密码输入是否合法。如果合法，返回"OK",否则返回不合法原因.
     * 判断规则是密码不为空，并且是大于等于6位小于20位的字符组合，不能包含空格和中文。
     * 
     * @param passwdStr
     * @return
     */
    public static String checkPasswdStr(String passwdStr) {
        if (isStrNull(passwdStr)) {
            return "密码不能为空";
        }
        if (isContainSpace(passwdStr)) {
            return "密码中不能包含空字符";
        }
        if (isContainChinese(passwdStr)) {
            return "密码中不能含有中文字符";
        }
        if (!isLengthValid(6, 20, passwdStr)) {
            return "密码必须大于6位小于20位";
        }

        return "OK";
    }

    /**
     * 判断一个字符串是否含有中文。
     * 
     * @param str
     * @return
     */
    public static boolean isContainChinese(String str) {
        if (str.getBytes().length == str.length()) {
            return false;
        }
        return true;
    }

    /**
     * 检测一个字符串长度是否合法。如果字符串为空，返回false。
     * 
     * @param min
     *            最小长度，不限制的话，传入-1
     * @param max
     *            最大长度，不限制的话，传入-1
     * @param str
     * @return
     */
    public static boolean isLengthValid(int min, int max, String str) {
        if (min < -1 || max < -1 || isStrNull(str))
            return false;
        int length = str.length();
        if (min == -1 && max == -1)
            return true;
        if (min == -1 && max > 0) {
            if (length <= max)
                return true;
        }
        if (max == -1) {
            if (length >= min)
                return true;
        }
        if (length >= min && length <= max)
            return true;
        return false;
    }

    /**
     * 判断手机号是否合法。判断规则是，开头是13、14、15或18,一共11位的纯数字组合
     * 
     * @param num
     * @return
     */
    public static boolean isMobileNumValid(String num) {
        String pat = "^(13|14|15|18)\\d{9}$";
        if (isStrNull(num))
            return false;
        if (num.matches(pat))
            return true;
        return false;

    }

}
